/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
    return /^(https?:|mailto:|tel:)/.test(path)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUsername(str) {
    const valid_map = ['admin', 'editor']
    return valid_map.indexOf(str.trim()) >= 0
}

/**
 * @param {string} url
 * @returns {Boolean}
 */
export function validURL(url) {
    const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
    return reg.test(url)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validLowerCase(str) {
    const reg = /^[a-z]+$/
    return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUpperCase(str) {
    const reg = /^[A-Z]+$/
    return reg.test(str)
}
/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validAlphabets(str) {
    const reg = /^[A-Za-z]+$/
    return reg.test(str)
}

/**
 * @param {string} email
 * @returns {Boolean}
 */
export function validEmail(email) {
    const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    return reg.test(email)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function isString(str) {
    if (typeof str === 'string' || str instanceof String) {
        return true
    }
    return false
}

/**
 * @param {Array} arg
 * @returns {Boolean}
 */
export function isArray(arg) {
    if (typeof Array.isArray === 'undefined') {
        return Object.prototype.toString.call(arg) === '[object Array]'
    }
    return Array.isArray(arg)
}
//验证是否是纯英文
export function isEnglish(rule, value, callback) {
    var pattern = /^[a-zA-Z]+$/
    if (pattern.test(value)) {
        return callback()
    }
    return callback(new Error('只能输入英文哦'))
}
//验证字符长度
export function isChartTen(rule, value, callback) {
    if (value.length > 10) {
        callback(new Error('最多只能输入10个字符'));
    } else if (value.length < 2) {
        callback(new Error('最少输入2个字符'));
    } else {
        callback();
    }
}

// 验证手机号
export function isPhone(rule, value, callback) {
    var pattern = /^1[34578]\d{9}$/
    if (pattern.test(value)) {
        return callback()
    }
    return callback(new Error('输入的手机号错误'))
}
//验证身份证
export function idCard(rule, value, callback) {
    if (value && (!(/\d{17}[\d|x]|\d{15}/).test(value) || (value.length !== 15 && value.length !== 18))) {
        callback(new Error('身份证号码不符合规范'))
    } else {
        callback()
    }
}
//验证是否是固话或者手机号
export function validatePhoneTwo(rule, value, callback) {
    const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;;
    if (value == '' || value == undefined || value == null) {
        callback();
    } else {
        if ((!reg.test(value)) && value != '') {
            callback(new Error('请输入正确的电话号码或者固话号码'));
        } else {
            callback();
        }
    }
}
//验证字符串长度
export function validateString(rule, value, callback) {
    if (value.length > 30) {
        callback(new Error('最多只能输入30个字符'));
    } else if (value.length < 2) {
        callback(new Error('最少输入2个字符'));
    } else {
        callback();
    }
}
//验证字符串长度
export function regionName(rule, value, callback) {
    if (value.length > 20) {
        callback(new Error('最多只能输入20个字符'));
    } else if (value.length < 2) {
        callback(new Error('最少输入2个字符'));
    } else {
        callback();
    }
}
//验证字符串长度
export function chartTen(rule, value, callback) {
    if (value.length > 10) {
        callback(new Error('最多只能输入10个字符'));
    } else if (value.length < 2) {
        callback(new Error('最少输入2个字符'));
    } else {
        callback();
    }
}
//验证特殊字符
export function specialCharacter(rule, value, callback) {
    const re = /^[\u0391-\uFFE5A-Za-z]+$/;
    const rsCheck = re.test(value);
    if (!rsCheck) {
        callback(new Error('只能输入中英文哦'));
    } else {
        callback();
    }
}
//验证地址输入长度
export function isAddress(rule, value, callback) {
    if (value.length > 50) {
        callback(new Error('最多只能输入50个字符'));
    } else if (value.length < 4) {
        callback(new Error('最少输入4个字符'));
    } else {
        callback();
    }
}

//验证负责人
export function isUser(rule, value, callback) {
    if (value.length > 10) {
        callback(new Error('最多只能输入10个字符'));
    } else if (value.length < 2) {
        callback(new Error('最少输入2个字符'));
    } else {
        callback();
    }
}
//验证楼栋单元号
export function isHU(rule, value, callback) {
    if (!Number(value)) {
        callback(new Error('请输入正整数，值为【1-999】'));
    } else {
        const re = /^[1-9][0-9]{0,2}$/;
        const rsCheck = re.test(value);
        if (!rsCheck) {
            callback(new Error('请输入正整数，值为【1-999】'));
        } else {
            callback();
        }
    }
}
//验证楼栋单元号
export function isRoom(rule, value, callback) {
    if (!Number(value)) {
        callback(new Error('请输入正整数，值为【1-9999】'));
    } else {
        const re = /^[1-9][0-9]{0,3}$/;
        const rsCheck = re.test(value);
        if (!rsCheck) {
            callback(new Error('请输入正整数，值为【1-9999】'));
        } else {
            callback();
        }
    }
}
//验证缴费金额
export function isMoney(rule, value, callback) {
    if (!Number(value)) {
        callback(new Error('请输入正整数，值为【1-999999】'));
    } else {
        const re = /^[1-9][0-9]{0,5}$/;
        const rsCheck = re.test(value);
        if (!rsCheck) {
            callback(new Error('请输入正整数，值为【1-999999】'));
        } else {
            callback();
        }
    }
}
//验证只能输入中文和字母
export function isName(rule, value, callback) {
    const re = /^[\u0391-\uFFE5A-Za-z]+$/;
    const rsCheck = re.test(value);
    if (!rsCheck) {
        callback(new Error('只能输入中文或者英文'));
    } else {
        callback();
    }
}
// 验证是否有特殊字符
export function isSpecial(rule, value, callback) {
    const re = /[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~！@#￥%……&*（）——\-+={}|《》？：“”【】、；‘’，。、]/im;
    const rsCheck = re.test(value);
    if (rsCheck) {
        callback(new Error('不能输入特殊字符哦'));
    } else {
        callback();
    }
}

// 只能输入英文或者数字
export function isNE(rule, value, callback) {
    const re = /[^\a-\z\A-\Z0-9]/g;
    const rsCheck = re.test(value);
    if (rsCheck) {
        callback(new Error('只能输入英文或者数字哦'));
    } else {
        callback();
    }
}
// 最多两位小数
export function decimals(rule, value, callback) {
    if (!/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(value)) {
        callback(new Error('最多两位小数哟'));
    } else {
        callback();
    }
};

export function checkPhone(rule, value, callback) {
    if (value === '') {
        callback(new Error('管理处电话不能为空'));
      } else {
        let regPhone = /^[0-9]*$/
        if (!regPhone.test(value)) {
          return callback(
            new Error("请输入正确的管理处电话")
          );
        }
        callback();
      }
    // if (value === '') {
    //     callback(new Error('请输入管理处电话'));
    //   } else {
    //     let regPone = null;
    //     let mobile = /^1(3|4|5|6|7|8|9)\d{9}$/; //最新16手机正则
    //     let tel = /^(0[0-9]{2,3}\-)([2-9][0-9]{4,7})+(\-[0-9]{1,4})?$/; //座机
    //     if (value.charAt(0) == 0) {    // charAt查找第一个字符方法，用来判断输入的是座机还是手机号
    //       regPone = tel;         
    //     } else {          
    //       regPone = mobile;
    //     }
    //     if (!regPone.test(value)) {
    //       return callback(
    //         new Error("管理处电话(座机格式'区号-座机号码')")
    //       );
    //     }
    //     callback();        
    //   }
};